The present invention is generally directed to web servers, and more particularly to determining resource constraints of web servers.
As web-based applications on the Internet grow in popularity, their providers often face the challenge of determining how to provision server-side resources so that the web-based application's response time, or time it takes for an application to respond to a user request, is satisfactory. Ideally, these resources, such as processing and memory capacity, database and storage, and access bandwidth, should be provisioned to deliver satisfactory performance under a broad range of operating conditions. Since a server provider cannot predict the volume and mix of requests that a server is going to receive, the provisioning of server resources is difficult.
The amount of resources provisioned by server providers is often a function of the size of the server provider. Large server providers typically resort to over-provisioning, or employ techniques such as distributed content delivery or dynamic server provisioning, to minimize the impact of unexpected surges in request traffic. Smaller application providers may trade robustness to large variations in workload for a less expensive infrastructure that is provisioned for the expected common load.
Provisioning resources based on the size of the service provider does not facilitate determining how an application infrastructure will handle large increases in traffic. Large increases in traffic may be due to planned events such as annual sales or Web casts, or unexpected surges in traffic due to attacks or “flash crowds” (i.e., a large number of people traversing a single web page over a short period of time). While these events may not occur frequently, the inability of the infrastructure to maintain reasonably good service, or at least degrade gracefully, can lead to significant loss of revenue and highly dissatisfied users. Without comprehensive stress testing that would likely disrupt service, there is currently no way for providers to observe the performance of their sites under heavy load in a controlled way.
Traditional benchmarking approaches or load generation tools used to test web servers in controlled local area network (LAN) settings cannot reveal effects of wide-area conditions or characteristics of the actual Internet connectivity of the clients (e.g., speed, location, diversity, etc.). More importantly, such laboratory-based experiments cannot help administrators assess the impact of access bandwidth—e.g., how the bandwidth limits the performance of clients under overload, and how bandwidth-imposed constraints compare against constraints on other server-side resources. While laboratory load testing is useful, it is difficult to recreate all of the dependencies of an Internet-facing live deployment in a laboratory setting.
Therefore, there remains a need to analyze a web server's resource provisioning in order to determine whether the web server can handle unexpected increases in traffic.